import Vue from "vue";
import store from "@/store";


/**
 * 自定义指令方法
 * 第一个参数是指令
 * 第二个是实现方法
 */
/**
 * 自定义角色指令
 */
Vue.directive('hasRole',{
      inserted(el,binding){
        //获取指令传递过来的数据
        const {value} = binding;

        //获取vuex中的角色信息
        const roles = store.state.roles;
		  console.log(roles);
        //定义超级管理员可以查看所有
        const admin = 'SUPER_ADMIN';
        //判断指令是否传值，传递的值是否是一个数组，是否大于0
        if (value && value instanceof Array && value.length > 0){
          /**
           * some：用于数组中的元素是否符合条件，不会改变原数组，返回TRUE或FALSE
           * @type {boolean}
           */
          const hasRole = roles.some(item => {
            /**
             * includes：用于判断字符串是否包含某个指定的子字符串
             */
              return item.code === admin || value.includes(item.code);
          });
          //如果没有该角色
          if(!hasRole){
            //把对应的元素删除掉
            el.parentNode.removeChild(el);
          }
        }else {
			throw new Error(`请设置${value}角色标签`)
		}


      }
})

/**
 * 自定义权限指令
 */
Vue.directive('hasPermi',{
	inserted(el,binding){
		const {value} =binding;
		//获取权限数据
		const permissions = store.state.permissions;
		//定义超级管理员可以查看所有
		const roles = store.state.roles;

		const admin = 'SUPER_ADMIN';
		//判断是否存在，是否属于数组，是否大于零

		if (value && value instanceof Array && value.length > 0){
			const hasPermi = permissions.some(item =>{
				return value.includes(item.code);
			});
			const hasRole = roles.some(item =>{
				return item.code === admin;
			});
			//如果没有该角色
			if(!hasRole || !hasPermi){
				//把对应的元素删除掉
				el.parentNode.removeChild(el);
			}
		}else {
			throw new Error(`请设置${value}对应的权限标签`)
		}
	}
})















